#include "common.h"
#include "voiceCtl.h"
#include <pthread.h>

// #define REC_CMD  "./arecord -d4 -c1 -r16000 -traw -fS16_LE cmd.pcm"
#define REC_CMD "arecord -d3 -c1 -r16000 -traw -fS16_LE cmd.pcm"
#define PCM_FILE "./cmd.pcm"
/* -d：录音时长（duration）
-c：音轨（channels）
-r：采样频率（rate）
-t：封装格式（type）
-f：量化位数（format） */

void catch (int sig)
{
	if (sig == SIGPIPE)
	{
		printf("killed by SIGPIPE\n");
		exit(0);
	}
}

// 图片放缩倍数
double scale_val[7] = {0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6};

extern int stop; // 控制退出视频子线程

int main(int argc, char const *argv[])
{
	pthread_t tid;
	int flag = -1; // 标记上一次采用的操作

	int temp = -1; // 记录上退出的位置
	struct cor p;  // 计算放缩图片的位置
	int n = 3;

	int music_con = 0; // 音乐位置
	struct caixukun music[3] = {{"madplay -Q /media/zw.mp3 &"},{"madplay -Q /media/red.mp3 &"}};
	int photo_con = 0; // 照片位置
	//struct caixukun photo[3] = {{"/img/C1.bmp"}, {"/img/C2.bmp"}, {"/img/C3.bmp"}};
	int photoNum=numsofAlbum();//将img所有图片存入photo数组中
	lcd_init();
	show_bmp(0, 0, "img/cat.bmp"); // 主界面
	led_beep_ctrl(LED8, 0);
	// if (argc != 2)
	// {
	// 	printf("Usage: %s <ubuntu-IP>\n", argv[0]);
	// 	exit(0);
	// }
	// signal(SIGPIPE, catch);
	// // 初始化TCP客户端套接字，用于连接到语音识别服务器(即ubuntu)
	// int sockfd_tcp = init_tcp_socket(argv[1]);
	// // 初始化本地UDP套接字
	// int sockfd_udp = init_udp_socket();

	int id_num = -1; // 识别后的指令id
	while (1)
	{
		// // 1，调用arecord来录一段音频
		// printf("please to start REC in 3s...\n");

		// // 在程序中执行一条命令  “录音的命令”
		// system(REC_CMD);

		// // 2，将录制好的PCM音频发送给语音识别引擎
		// send_pcm(sockfd_tcp, PCM_FILE);

		// // 3，等待对方回送识别结果（字符串ID）
		// xmlChar *id = wait4id(sockfd_tcp);
		// if (id == NULL)
		// {
		// 	continue;
		// }
		// id_num = atoi((char *)id);
		printf("请输入控制指令：");
		scanf("%d", &id_num);
		if (id_num == 1) // 开灯
		{
			led_beep_ctrl(LED8, 1);
		}
		else if (id_num == 2) // 关灯
		{
			led_beep_ctrl(LED8, 0);
		}
		else if (id_num == 3) // 打开蜂鸣器
		{
			led_beep_ctrl(BEEP, 1);
		}
		else if (id_num == 4) // 关闭蜂鸣器
		{
			led_beep_ctrl(BEEP, 0);
		}
		else if (id_num == 5) // 播放音乐
		{
			music_ctrl(START);
			show_bmp(0, 0, "img/catPlay.bmp"); // 音乐播放界面
			flag = 5;
		}
		else if (id_num == 6) // 暂停
		{
			if (flag == 5)
			{
				music_ctrl(PAUSE);
				show_bmp(0, 0, "img/catPAuse.bmp"); // 音乐暂停界面
			}
			else if (flag == 9)
			{
				pause_video();
			}
		}
		else if (id_num == 7) // 继续
		{
			if (flag == 5)
			{
				music_ctrl(CONT);
				show_bmp(0, 0, "img/catPlay.bmp"); // 音乐继续界面
			}
			else if (flag == 9)
			{
				continue_video();
			}
		}
		else if (id_num == 8) // 停止播放
		{
			if (flag == 5)
			{
				music_ctrl(END);
				// show_bmp(0, 0, "img/cat.bmp"); //主界面
			}
			else if (flag == 9)
			{
				stop_video();
			}
			flag = -1;
			show_bmp(0, 0, "img/cat.bmp"); // 返回主界面
		}
		else if (id_num == 17) // 上一首
		{
			music_con--;
			if (music_con < 0)
			{
				music_con = 1;
			}
			music_ctrl(END);
			music_ctrl(music[music_con].filename);
		}
		else if (id_num == 18) // 下一首
		{
			music_con++;
			if (music_con > 1)
			{
				music_con = 0;
			}
			music_ctrl(END);
			music_ctrl(music[music_con].filename);
		}
		else if (id_num == 9) // 播放视频
		{
			play_video_backstage("/death/StarRailway.mp4");
			flag = 9;
		}
		else if (id_num == 13) // 打开相册
		{
			photoNum=numsofAlbum();//将img所有图片存入photo数组中
			temp = 13;
			char pp[256];
			snprintf(pp, sizeof(photo[0].filename), "img/%s", photo[0].filename);  // 存储完整路径
			printf("scan photo is: %s\n",pp);
			show_bmp_with_blinds(0, 0, pp, 100, 500, 3);
		}
		else if (id_num == 19) // 上一张
		{
			photo_con--;
			if (photo_con < 0)
			{
				photo_con = photoNum-1;
			}
			char pp[256];
			snprintf(pp, sizeof(photo[photo_con].filename), "img/%s", photo[photo_con].filename);  // 存储完整路径
			// printf("scan photo is: %s\n",pp);
			show_bmp_with_blinds(0, 0, pp, 100, 500, 3);
		}
		else if (id_num == 20) // 下一张
		{
			photo_con++;
			if (photo_con > photoNum-1)
			{
				photo_con = 0;
			}
			char pp[256];
			snprintf(pp, sizeof(photo[photo_con].filename), "img/%s", photo[photo_con].filename);  // 存储完整路径
			printf("scan photo is: %s\n",pp);
			show_bmp_with_blinds(0, 0, pp, 100, 500, 3);
		}
		else if (id_num == 21) // 放大图片
		{
			if (n < 6)
				n++;
			p = calculate_top_left_corner(800, 480, scale_val[n], scale_val[n]);
			char pp[256];
			snprintf(pp, sizeof(photo[photo_con].filename), "img/%s", photo[photo_con].filename);  // 存储完整路径
			// printf("scan photo is: %s\n",pp);
			show_bmp_scaled(p.x, p.y, pp, scale_val[n], scale_val[n]);
		}
		else if (id_num == 22) // 缩小图片
		{
			if (n > 0)
				n--;
			show_a_color(0);
			p = calculate_top_left_corner(800, 480, scale_val[n], scale_val[n]);
			char pp[256];
			snprintf(pp, sizeof(photo[photo_con].filename), "img/%s", photo[photo_con].filename);  // 存储完整路径
			show_bmp_scaled(p.x, p.y, pp, scale_val[n], scale_val[n]);
		}
		else if (id_num == 14) // 退出相册
		{
			if (temp == 13)//退出相册
			{
				show_bmp(0, 0, "img/cat.bmp"); // 返回主界面
			}
			if (temp == 24)//退出查看截图返回摄像头界面
			{
				//  创建摄像头线程
				stop = 0;
				if (pthread_create(&tid, NULL, camera, NULL) != 0)
				{
					printf("线程创建失败！");
					return -1;
				}
			}
			// show_bmp_with_blinds(0, 0, "/img/C2.bmp", 100, 0, 3);
		}
		else if (id_num == 15)
		{
			// lcd_init();
			//  创建摄像头线程
			stop = 0;
			if (pthread_create(&tid, NULL, camera, NULL) != 0)
			{
				printf("线程创建失败！");
				return -1;
			}
		}
		else if (id_num == 16) // 关闭摄像头
		{
			stop = 1;				 // 让摄像头线程退出
			pthread_join(tid, NULL); // 等待摄像头线程退出
			sleep(1);				 // 确保摄像头完全关闭
			lcd_init();
			// show_a_color(0xffffff);  // 显示纯色
			show_bmp(0, 0, "img/cat.bmp"); // 返回主界面
		}
		else if (id_num == 23) // 截图
		{
			cut=0;//截图信号
		}
		else if (id_num == 24) // 查看截图
		{
			stop = 1;				 // 让摄像头线程退出
			pthread_join(tid, NULL); // 等待摄像头线程退出
			sleep(1);				 // 确保摄像头完全关闭
			lcd_init();
			temp = 24;

			char *filename = lastCut(); //上一张截图的名字
            for(int i = 0; i < numsofAlbum(); i++) { 
                printf("filename: %s\n", photo[i].filename);
            }
            printf("last cutting photo : %s\n", filename);
            show_bmp(0, 0, filename);
            
            free(filename);
			
			//打开所截图片

		}
		else if (id_num == 999) // 退出系统
		{
			printf("bye-bye!\n");
			show_bmp(0, 0, "img/cat.bmp"); // 主界面
			exit(0);
		}
		// printf("recv id: %d \n", id_num);
		// //  udp发送数据给接收端, 接收端收到数据id后，再决定执行什么功能
		// send_id(sockfd_udp, id_num);
	}

	return 0;
}